package text_2023_10_07;

/**
 * @author Vv
 * @version 1.0
 * @project coding_learn
 * @description
 * @date 2023/10/9 09:54:54
 */

//规定1和A对应，2和B对应，3和C对应。。。
//那么一个数字字符串比如“111”就可以转化为：
//“AAA” "KA" 和“AK”
//给定一个只有数字字符组成的字符串str,返回有多少种转化结果
public class ConvertToLetterString {
    public static int number(String s){
        if(s==null || s.length() < 1){
            return 0;
        }
        return process(s.toCharArray(),0);
    }
    private static int process(char[] str,int index){
        if(index == str.length){
            return 1;
        }
        if(str[index] == '0'){
            return 0;
        }
        int ways = process(str,index + 1);
        if(index + 1 < str.length && (str[index] - '0')*1- + str[index + 1] - '0' < 27){
            ways += process(str,index+2);
        }
        return ways;
    }
    public static int dp(String s){
        if(s==null || s.length() < 1){
            return 0;
        }
        char[] str = s.toCharArray();
        int[] dp = new int[str.length + 1];
        dp[str.length] = 1;
        for(int index = str.length;index >= 0;index--){
            if(str[index] != '0'){
                dp[index] = dp[index + 1];
                if(index + 1 < str.length && (str[index] - '0')*1- + str[index + 1] - '0' < 27){
                    dp[index] += dp[index+2];
                }
            }
        }
        return dp[0];
    }

}
